﻿// 7-4 模拟EXCEL排序 (25 分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。

//user:lidongcheng
//level:6
//date:20191109
//key:注意字符串转换成数值的函数形式为sto_，这里变成int就是i，float就是f，double就是d
//而且这个函数会自动忽略字符串中第一个数字前面的0
//2：又是要注意成绩或者名字相同下，按学号递增排序，其他都很简单。
//复习了一下switch，case 1:f1(1);break;
#include <stdlib.h>
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;
void swap(string* a, string* b,int *c, int i) {
	string a1;
	string b1;
	int c1;
	a1 = a[i];
	a[i] = a[i + 1];
	a[i + 1] = a1;

	b1 = b[i];
	b[i] = b[i + 1];
	b[i + 1] = b1;

	c1 = c[i];
	c[i] = c[i + 1];
	c[i + 1] = c1;
}
void bsort(int c,  int n,  string* number, string* name, int* score) {//a这里是传值引用，就是会对a内值做修改
	int i;
	int j;

	n--;//因为在main函数里这个n对于数组来说是多一个的。
	switch (c) {
	case 1:for (j = 0; j < n; j++)
	{
		for (i = 0; i < n; i++)//冒泡排序，使比值最高那个排最前
		{

			if (stoi(number[i]) > stoi(number[i+1]))
			{
				swap(number, name, score,i);

			}
		}
	}; break;
	case 2:for (j = 0; j < n; j++)
	{
		for (i = 0; i < n; i++)//冒泡排序，使比值最高那个排最前
		{

			if (name[i] > name[i + 1]||((name[i] == name[i + 1])&& stoi(number[i]) > stoi(number[i + 1])) )
			{
				swap(number, name, score, i);

			}
		}
	}; break;
	case 3:for (j = 0; j < n; j++)
	{
		for (i = 0; i < n; i++)//冒泡排序，使比值最高那个排最前
		{

			if (score[i] > score[i + 1] || ((score[i] == score[i + 1]) && stoi(number[i]) > stoi(number[i + 1])))
			{
				swap(number, name, score, i);

			}
		}
	}; break;
	}
}

int main()
{
	int n, c;
	cin >> n >> c;
	int i;
	string* number = new string[n];//存学号
	int* score = new int[n];//存成绩
	string* name = new string[n];//存名字

	for (i = 0; i < n; i++)
	{
		cin >> number[i];
		cin >> name[i];
		cin >> score[i];
	}

	bsort(c, n, number, name, score);//排序函数，按的值重新拍一次



	for (i = 0; i < n; i++)
	{
		cout << number[i] << " " << name[i] << " " << score[i];
		if (i != n - 1)
		{
			cout << "\n";
		}

	}
}